-- 先定义三个变量
-- 锁的key
--local key = KEYS[1];
-- 线程的id
--local threandId = ARGV[1];
-- 锁的过期时间
--local relaseTime = ARGV[2];

--  判断锁是否存在
if (redis.call('EXIST', key) == 0) then
    -- 不存在,获取锁
    redis.call('HSET', KEYS[1], ARGV[1], 1);
    -- 设置有效期
    redis.call('EXPIRE', KEYS[1], ARGV[2]);
    -- 返回结果
    return 1;
    --结束
end;
-- 代码走到这里说明 锁已经存在,判断threadId 是否是自己的
if (redis.call('HEXISTS', KEYS[1], ARGV[1]) == 1) then
    -- 是自己的锁 获取取锁 自增一次
    redis.call('HINCRBY', KEYS[1], ARGV[1], 1);
    -- 重新设置有效期
    redis.call('EXPIRE', KEYS[1], ARGV[2]);
    -- 返回结果
    return 1;
end;
-- 代码走到这里说明 获取的锁不是自己的 获取锁失败
return 0;
